<?php

namespace app\api\model;

use app\common\enums\StatusEnum;

class Coupon extends \app\common\model\Coupon
{
    /**
     * 优惠券列表
     * @param $oauthId
     * @param int $type 1未使用，2已使用，3已过期
     * @param $page
     * @param $size
     * @return array
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public static function getList($oauthId, $type, $page, $size)
    {
        // 已使用，直接返回列表
        if ($type == self::USED) {
            return CouponUsed::getList($oauthId, $page, $size);
        }

        $time = time();
        $offset = ($page - 1) * $size;

        // 已经使用的优惠券ID
        $ids = CouponUsed::getColumn($oauthId);
        $couponIds = array_keys($ids);

        $sql = static::field('id, name, money,  start_time AS startTime, end_time AS endTime, rule')
            ->where(['status' => StatusEnum::ENABLED]);

        // 排除已使用的
        if ($couponIds) {
            $sql->where('id', 'not in', $couponIds);
        }

        // 未使用
        if ($type == self::NO_USE) {
            $sql->where('start_time', '<=', $time)->where('end_time', '>=', $time);
        } else {
            // 已过期
            $sql->where('end_time', '<', $time);
        }

        $model = $sql->order(['sort_num' => 'desc', 'create_time' => 'desc'])
            ->limit($offset, $size)
            ->select()
            ->toArray();

        foreach ($model as $key => $value) {
            $model[$key]['startTime'] = get_date($value['startTime']);
            $model[$key]['endTime'] = get_date($value['endTime']);
        }

        return [
            'list' => $model,
            'count' => $sql->count()
        ];
    }
}